-- ShipAnimation
-- Created by chengb Jun/5/2015
-- 幽灵船动画管理

-- 幽灵船动作类型
SHIP_ACTION_IDLE        = 1;      -- 待机
SHIP_ACTION_CAST        = 2;      -- 施法
SHIP_ACTION_ATTACK      = 3;      -- 攻击

-- 所有的怪物动作
ALL_SHIP_ACTIONS = {
    SHIP_ACTION_IDLE,         -- 待机
    SHIP_ACTION_CAST,         -- 施法
    SHIP_ACTION_ATTACK,       -- 攻击
}

-- 当前动作类型（默认待机）
local currentActionType = SHIP_ACTION_IDLE;

ShipAnimation = class("ShipAnimation", function()
    return cc.Node:create();
end);

function ShipAnimation.create(filePath)
    return ShipAnimation.new(filePath);
end

-- 构造函数
-- @param filePath : 动画文件路径
function ShipAnimation:ctor(filePath)
    -- 载入动画
    local node, action = AnimationCacheM.createAnimationNodeAndAction(filePath);

    self.node = node;
    self.action = action;

    node:runAction(action);
    self:addChild(node);

    self.filePath = filePath;

    self.hasDestroyed = false;
end

-----------------------------
-- 播放
-- @param actionType   动作类型
-- @param loop         是否循环播放
-- @param startIndex   起始帧
-- @param endIndex     结束帧
-- @param speed        播放速度
function ShipAnimation:play(actionType, loop, startIndex, endIndex, speed)
    if nil == loop then
        loop = false;
    end

    if table.indexOf(ALL_SHIP_ACTIONS, actionType) < 0 then
        cclog("无法播放幽灵船动作，未知的动作类型：%s", tostring(actionType));
        return;
    end

    -- 播放
    self.action:setTimeSpeed(speed);
    self.action:gotoFrameAndPlay(startIndex, endIndex, loop);
end

-- 暂停播放
function ShipAnimation:pause()
    if not self.action then
        return;
    end
    self.action:pause();
end

-- 销毁动画
function ShipAnimation:destroy()
    if not self.hasDestroyed then
        if self.node then
            self:removeChild(self.node);
        end

        AnimationCacheM.freeAnimationNodeAndAction(self.filePath, self.node, self.action);
        self.hasDestroyed = true;

        self.node = nil;
        self.action = nil;
        self.filePath = nil;
    end
end



